package org.example.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.example.model.Questionnaire;
import org.example.model.UserResponse;
import org.example.service.QuestionnaireService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "*") // 允许跨域请求，生产环境中应该限制来源
@Api(tags = "问卷管理", description = "问卷创建、查询和回答相关接口")
public class QuestionnaireController {

    @Autowired
    private QuestionnaireService questionnaireService;

    // 创建问卷
    @PostMapping("/questionnaires")
    @ApiOperation(value = "创建问卷", notes = "创建一个新的问卷，包含问题和选项")
    public ResponseEntity<Questionnaire> createQuestionnaire(
            @ApiParam(value = "问卷信息", required = true) @RequestBody Questionnaire questionnaire) {
        Questionnaire savedQuestionnaire = questionnaireService.createQuestionnaire(questionnaire);
        return ResponseEntity.ok(savedQuestionnaire);
    }

    // 获取所有问卷
    @GetMapping("/questionnaires")
    @ApiOperation(value = "获取所有问卷", notes = "获取系统中所有活跃的问卷列表")
    public ResponseEntity<List<Questionnaire>> getAllQuestionnaires() {
        List<Questionnaire> questionnaires = questionnaireService.getAllQuestionnaires();
        return ResponseEntity.ok(questionnaires);
    }

    // 获取单个问卷
    @GetMapping("/questionnaires/{id}")
    @ApiOperation(value = "获取问卷详情", notes = "根据问卷ID获取问卷详细信息，包含所有问题和选项")
    public ResponseEntity<Questionnaire> getQuestionnaireById(
            @ApiParam(value = "问卷ID", required = true) @PathVariable Long id) {
        Questionnaire questionnaire = questionnaireService.getQuestionnaireById(id);
        return ResponseEntity.ok(questionnaire);
    }

    // 提交问卷回答
    @PostMapping("/user-responses")
    @ApiOperation(value = "提交问卷回答", notes = "用户提交问卷的回答内容")
    public ResponseEntity<UserResponse> submitResponse(
            @ApiParam(value = "用户回答信息", required = true) @RequestBody UserResponse userResponse) {
        UserResponse savedResponse = questionnaireService.saveUserResponse(userResponse);
        return ResponseEntity.ok(savedResponse);
    }

    // 获取用户的所有回答
    @GetMapping("/user-responses/{userId}")
    @ApiOperation(value = "获取用户回答", notes = "获取指定用户的所有问卷回答")
    public ResponseEntity<List<UserResponse>> getUserResponses(
            @ApiParam(value = "用户ID", required = true) @PathVariable Long userId) {
        List<UserResponse> responses = questionnaireService.getUserResponses(userId);
        return ResponseEntity.ok(responses);
    }
}